package arquitetura.view;

import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JFormattedTextField;
import javax.swing.border.BevelBorder;
import javax.swing.border.LineBorder;
import arquitetura.fachada.Fachada;
import exceptions.GeralException;
import java.text.ParseException;
import to.Fornecedor;
import util.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class ViewFornecedorRec extends JDialog {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1302023104295176615L;
	private JTextField txtRazaoSocial;
	private JTextField txtEndereco;
	private JTextField txtEmail;
	private JTextField txtNomeContato;
	private JFormattedTextField ftxtCNPJ;
	private JFormattedTextField ftxtFone;
	private Fachada fachada;
	private Fornecedor fornecedor;
	private static int codigo;
	public static boolean fornecedorSalvo = false;

	/**
	 * Launch the application.
	 */
	public static void exibeTela(int codigoFornecedor) {
		codigo = codigoFornecedor;	
		try {
			ViewFornecedorRec dialog = new ViewFornecedorRec();
			dialog.setLocationRelativeTo(null);
			dialog.setModal(true);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog.
	 * @throws ParseException 
	 */
	public ViewFornecedorRec() throws ParseException {
		fachada = Fachada.getInstancia();
		fornecedor = new Fornecedor();
		
		setTitle("Cadastro de Fornecedores");
		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 571, 295);
		getContentPane().setLayout(null);
		
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBounds(10, 210, 532, 36);
		getContentPane().add(panel);
		
		JButton btnSalvar = new JButton("Salvar");
		btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					preencherDadosFornecedor();
					
					if (codigo == 0) {						
						fornecedorSalvo = fachada.incluirFornecedor(fornecedor);
							if (fornecedorSalvo)
								limparDadosDaTela();					
					} else {
						fornecedorSalvo = fachada.alterarFornecedor(fornecedor);
						if (fornecedorSalvo)
							dispose();
					}					
				} catch (GeralException e1) {
					JOptionPane.showMessageDialog(null, "Ocorreu o seguinte erro: " + e1.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
				}
			}
		});
		btnSalvar.setBounds(333, 7, 89, 23);
		panel.add(btnSalvar);
		
		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		btnCancelar.setBounds(432, 7, 89, 23);
		panel.add(btnCancelar);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		panel_1.setLayout(null);
		panel_1.setBackground(new Color(240, 248, 255));
		panel_1.setBounds(10, 11, 532, 190);
		getContentPane().add(panel_1);
		
		JPanel panel_2 = new JPanel();
		panel_2.setBorder(new LineBorder(new Color(176, 224, 230)));
		panel_2.setLayout(null);
		panel_2.setForeground(Color.BLACK);
		panel_2.setBackground(Color.WHITE);
		panel_2.setBounds(10, 11, 512, 162);
		panel_1.add(panel_2);
		
		JLabel lblRazoSocial = new JLabel("Raz\u00E3o Social");
		lblRazoSocial.setBounds(10, 11, 83, 14);
		panel_2.add(lblRazoSocial);
		
		txtRazaoSocial = new JTextField();
		txtRazaoSocial.setColumns(10);
		txtRazaoSocial.setBounds(10, 29, 347, 20);
		txtRazaoSocial.setDocument(new DocumentoCaixaAlta(60));
		panel_2.add(txtRazaoSocial);
		
		JLabel lblCnpj = new JLabel("CNPJ");
		lblCnpj.setBounds(367, 11, 46, 14);
		panel_2.add(lblCnpj);
		
		ftxtCNPJ = new JFormattedTextField(Formato.cnpj());
		ftxtCNPJ.setBounds(367, 29, 135, 20);
		panel_2.add(ftxtCNPJ);
		
		JLabel label_2 = new JLabel("Endere\u00E7o");
		label_2.setBounds(10, 60, 83, 14);
		panel_2.add(label_2);
		
		txtEndereco = new JTextField();
		txtEndereco.setColumns(10);
		txtEndereco.setBounds(10, 78, 492, 20);
		txtEndereco.setDocument(new DocumentoCaixaAlta(100));
		panel_2.add(txtEndereco);
		
		JLabel lblTelefoneContato = new JLabel("Telefone Contato");
		lblTelefoneContato.setBounds(10, 109, 101, 14);
		panel_2.add(lblTelefoneContato);
		
		ftxtFone = new JFormattedTextField(Formato.telefone());
		ftxtFone.setBounds(10, 127, 92, 20);
		panel_2.add(ftxtFone);
		
		JLabel lblNomeContato = new JLabel("Nome Contato");
		lblNomeContato.setBounds(112, 109, 101, 14);
		panel_2.add(lblNomeContato);
		
		JLabel label_5 = new JLabel("Email");
		label_5.setBounds(256, 109, 72, 14);
		panel_2.add(label_5);
		
		txtEmail = new JTextField();
		txtEmail.setColumns(10);
		txtEmail.setBounds(254, 127, 247, 20);
		txtEmail.setDocument(new DocumentoCaixaBaixa(60));
		panel_2.add(txtEmail);
		
		txtNomeContato = new JTextField();
		txtNomeContato.setBounds(110, 127, 134, 20);
		txtNomeContato.setColumns(10);
		txtNomeContato.setDocument(new DocumentoCaixaAlta(60));
		panel_2.add(txtNomeContato);		
		
		if (codigo > 0){
			try {
				fornecedor = fachada.consultarFornecedor(codigo);
				preencherControlesComDadosFornecedor();
			} catch (GeralException e1) {
				JOptionPane.showMessageDialog(null, "Ocorreu o seguinte erro: " + e1.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
			}			
		}
	}
	
	private void preencherDadosFornecedor(){
		String fone = Util.removerFormatacao(ftxtFone.getText());
		
		fornecedor.setRazaoSocial(txtRazaoSocial.getText());
		fornecedor.setEndereco(txtEndereco.getText());
		fornecedor.setFoneContato(fone);
		fornecedor.setNomeContato(txtNomeContato.getText());
		setCnpj();
		setEmail();
	}
	
	private void setCnpj(){
		String cnpj = Util.removerFormatacao(ftxtCNPJ.getText());
		
		if (Util.ehUmTextoVazio(cnpj))
			fornecedor.setCnpj(null);
		else
			fornecedor.setCnpj(cnpj);
	}
	
	private void setEmail(){
		String email = txtEmail.getText();
		
		if (Util.ehUmTextoVazio(email))
			fornecedor.setEmailContato(null);
		else
			fornecedor.setEmailContato(email);
	}
	
	private void limparDadosDaTela(){
		txtRazaoSocial.setText(null);
		ftxtCNPJ.setText(null);
		txtEndereco.setText(null);
		ftxtFone.setText(null);
		txtNomeContato.setText(null);
		txtEmail.setText(null);
	}
	
	private void preencherControlesComDadosFornecedor(){		
		txtRazaoSocial.setText(fornecedor.getRazaoSocial());
		ftxtCNPJ.setText(fornecedor.getCnpj());
		txtEndereco.setText(fornecedor.getEndereco());
		ftxtFone.setText(fornecedor.getFoneContato());
		txtNomeContato.setText(fornecedor.getNomeContato());
		txtEmail.setText(fornecedor.getEmailContato());
	}
}
